// 模块导入
import database from '../../utils/database'
import goodsService from './goods.service';
// 数据库中购物车表的表名
const shopTableName = 'ShopCar'

// 定义购物车中的商品模型接口
export interface ShopGoodsItem {
    gid: number;           // 商品id
    count: number;         // 商品数量
}

// 购物车服务类
export class ShopService {
    // 获取购物车数据
    getShopCar(uid: number) {
        return new Promise((resolve, reject)=>{
            database.queryData(shopTableName, ["*"], `user_id=${uid}`, (data)=>{
                if (data != null) {
                    if (data.result.length > 0) {
                        let shopCar = data.result.pop()
                        // 拼接商品数据
                        let resultItems:any[] = []
                        let goodsItems = JSON.parse(shopCar.goods ?? "")
                        if (goodsItems.length == 0) {
                            shopCar.goods = resultItems
                            resolve(shopCar)
                            return 
                        }
                        // 记录查询次数
                        let execTimes = 0
                        goodsItems.forEach((element: ShopGoodsItem) => {
                            goodsService.getGoodsDetail(element.gid).then((goodsResult: any)=>{
                                resultItems.push({
                                    count: element.count,
                                    item: goodsResult[0]
                                })
                                execTimes += 1
                                // 所有数据查询完成后，统一返回
                                if (execTimes == goodsItems.length) {
                                    shopCar.goods = resultItems
                                    resolve(shopCar)
                                }
                            })
                        });
                    } else {
                        // 没有任何数据，直接返回
                        resolve(null)
                    }
                } else {
                    reject('获取购物车异常')
                }
            })
        })

    }

    // 更新购物车数据
    updateShopCar(uid: number, goods:ShopGoodsItem[]) {
        return new Promise((resolve)=>{
            database.updateData(shopTableName, `goods='${JSON.stringify(goods)}'`, `user_id=${uid}`)
            resolve(null)
        })
    }

    // 添加商品到购物车
    addGoodsToShopCar(uid: number, g: ShopGoodsItem) {
        return new Promise((resolve)=>{
            // 查询数据库中是否已经有当前用户的购物车数据
            database.queryData(shopTableName, ["*"], `user_id=${uid}`, (data)=>{
                if (data && data.result.length > 0) {
                    // data存在，标明已经有购物车对象，进行修改
                    let goodsString = data.result[0].goods
                    // 解析出商品列表
                    let list = JSON.parse(goodsString) ?? []
                    // 查看商品是否已经在购物车里了
                    let haveGoods = false
                    list.forEach((element:ShopGoodsItem) => {
                        if (element.gid == g.gid) {
                            // 商品已经在购物车中，则修改购买量
                            haveGoods = true
                            element.count = element.count + g.count
                            return
                        }
                    });
                    // 商品不在购物车中，新增商品
                    if (!haveGoods) {
                        list.push(g)
                    }
                    // 更新购物车数据
                    database.updateData(shopTableName, `goods='${JSON.stringify(list)}'`, `user_id=${uid}`)
                    resolve(null)
                } else {
                    // 新建购物车对象
                    database.insertData(shopTableName, ["user_id", "goods"], [uid, JSON.stringify([g])], ()=>{
                        resolve(null)
                    })
                }
            })
        })
    }
}
// 导出服务实例
export default new ShopService();